#include "sqlist.h"
// 判空
int sqlist_empty(P_sqlist L)
{
    if (L == NULL)
    {
        printf("顺序表为空\n");
        return 0;
    }
    else
    {
        printf("顺序表不为空,有%d个元素\n", L->Length);
        return L->Length;
    }
}
// 顺序表的创建
P_sqlist Sqlist_create()
{
    P_sqlist L = (SqList *)malloc(sizeof(SqList));
    if (L == NULL)
    {
        printf("分配空间失败\n");
    }
    memset(L, 0, sizeof(SqList));
    L->Length = -1;
    return L;
};
// 顺序表清空
int sqlist_clear(P_sqlist L)
{
    if (sqlist_empty(L))
    {
        memset(L, 0, sizeof(SqList));
        L->Length = -1;
        printf("顺序表已经清空\n");
        return 0;
    }
    else
    {
        printf("顺序表为空，无需清空\n");
        return -1;
    }
};
// 销毁表
int sqlist_destroy(P_sqlist L)
{
    if (L == NULL)
    {
        printf("顺序表为空\n");
        return -1;
    }
    else
    {
        free(L);
        printf("顺序表已经销毁\n");
        return 0;
    }
}

// 求顺序表的长度
int sqlist_length(P_sqlist L)
{
    int length = sqlist_empty(L);
    return length;
}
// 在顺序查找中查找数据value
int sqlist_locate(P_sqlist L, DATA_TYPE value){
    for (int i = 0; i < L->Length; i++)
    {
        if (L->data[i] == value)
        {
            return i;
        }
    }   
    return -1;
}
// 在顺序表中指定的位置插入指定数据
int sqlist_insert(P_sqlist L, DATA_TYPE value, int pos)
{
    if (pos < 0 || pos > (L->Length) + 1)
    {
        printf("插入位置不合法\n");
        return -1;
    }
    if (L->Length == MAXSIZE - 1)
    {
        printf("顺序表已满\n");
        return -1;
    }
    for (int i = L->Length; i >= pos; i--)
    {
        L->data[i + 1] = L->data[i];
    }
    L->data[pos] = value;
    L->Length++;
}
// 删除指定位置元素
int sqlist_delete(P_sqlist L, int pos)
{
    if (pos < 0 || pos > L->Length)
    {
        printf("删除位置不合法\n");
        return -1;
    }
    for (int i = pos; i < L->Length; i++)
    {
        L->data[i] = L->data[i + 1];
    }
    L->Length--;
}

// 遍历顺序表
int sqlist_show(P_sqlist L)
{
    for (int i = 0; i < L->Length + 1; i++)
    {
        printf("%d ", L->data[i]);
    }
    printf("\n");
}
// 求两个顺序表的并集
int sqlist_merge(P_sqlist L1, P_sqlist L2)
{
    if (L1 == NULL && L2 == NULL)
    {
        printf("顺序表为空\n");
        return -1;
    }
    int i = 0, j = 0;
    for (int i = 0; i < L1->Length; i++)
    {
       
        if(sqlist_locate(L1, L2->data[i]) ==-1){
            printf("%d需要并到L1 ", L2->data[i]);
            printf("L1长度为:%d\n",L1->Length);
            sqlist_insert(L1, L2->data[i], L1->Length+1);
        }
    }
    printf("\n");
}
// 删除顺序表中的重复元素
int sqlist_purge(P_sqlist L){
    for (int i = 0; i < L->Length; i++)
    {
        for (int j = i+1; j < L->Length; j++)
        {
            if(L->data[i] == L->data[j]){
                sqlist_delete(L, j);
                j--;
            }
        }
    }
}

void main()
{
    P_sqlist L = Sqlist_create();
    sqlist_insert(L, 0, 0);
    sqlist_insert(L, 10, 1);
    sqlist_insert(L, 20, 2);
    sqlist_insert(L, 30, 3);
    sqlist_insert(L, 10, 4);
    sqlist_insert(L, 10, 5);
    sqlist_insert(L, 30, 6);
    sqlist_insert(L, 6, 7);
    P_sqlist L2 = Sqlist_create();
    sqlist_insert(L2, 77, 0);
    sqlist_insert(L2, 66, 1);
    sqlist_insert(L2, 55, 2);
    sqlist_show(L);
    sqlist_show(L2);
    // sqlist_empty(L);
    // sqlist_clear(L);
    // // sqlist_show(L);
    // sqlist_length(L);
    // sqlist_destroy(L);
    sqlist_purge(L);
    // int pos = sqlist_locate(L, 0);
    // printf("查找位置为:%d\n",pos);
    sqlist_show(L);
}